iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0

前面兩天詳細介紹了投影矩陣和 3D 轉換矩陣,這篇文章要總結一下,讀者如果沒有時間,可以跳過前面,直接看這篇的結論。我們也會介紹一些實作上的細節,這部分如果只是讀論領域內的論文而缺少實作經驗的話,時常會搞混。

相機參數

前面講了很多,就是為了要介紹如何方便的表達相機姿態+投影,假如有一個3D空間的點 (x, y, z),已知相機的姿態 latex 和投影參數 latex,我們可以直接用兩個矩陣乘法計算出他在圖片上的像素座標 (u, v)

latex

通常以下的名詞代表以上這些資訊

  • Camera intrinsic: 投影相關的參數 latex,中文簡稱內參
  • Camera extrinsic: 相機的旋轉和位移 latex,也做 camera pose,中文簡稱外參

Camera to world / world to camera

這裡要介紹一個筆者認為初學者很容易搞混的部分,釐清這個概念有助於實作。前面介紹用 R,t 去描述 camera pose,不過如果我們說這個 camera pose,實際上有兩種可能的定義 World to camera (先前介紹的是這個) 和 Camera to world。

差別在於,”乘上這個矩陣後,這個 3D 的點,是從 camera coordinate (相機座標系) 轉換到 world coordinate (世界座標系) ,還是反過來,從 world coordinate 轉換到 camera coordinate,下圖為例:

camera-world

所謂 camera coordinate 就是指,這個任一個點的座標,都是以該相機作為原點來表達,也就是說,在這個座標裡的點,只要乘上投影矩陣,就會得到圖片中的二維座標了。而 world coordinate 就是指原本的座標系了。

因此我們前面提到的這個轉換+投影的公式,文字上的解釋就是,給定一個 world coordinate中的3D 點,我們先用 world-to-camera 的轉換轉到 以camera 位置作為原點的座標系,再做投影。

把這個轉換想做函數的話,兩者之間其實就是一個反函數的關係,也就是可以用反矩陣 latex 互相轉換。

假使拿到一個數據集或是使用某些程式庫,裡面提到camera pose 矩陣或是extrinsic parameters (外部參數) 時就要很小心,有可能是 camera-to-world 或是 world-to-camera。

還有一個可能的變化:矩陣乘法的順序,有些定義可能是轉換矩陣乘在左邊,有些可能是乘在右邊,這個也要小心。

筆者與身邊的朋友常遇到的事情就是:在一個新的數據集上做實驗時,如果文件定義不清楚,常常要花許多時間在測試座標轉換,非常痛苦。

總結 TL;DR

  • 我們可以利用以下資訊,計算一個 3D 空間的點 (x, y, z) 在圖片上的像素座標 (u, v)

    • camera intrinsic: 投影相關的參數 latex

    • camera extrinsic: 相機的旋轉和位移 latex

      latex

  • 實作上小心 camera-to-world 還是 world-to-camera,可以用反矩陣互相轉換

  • 這裡介紹表達方式屬於電腦視覺與機器人領域常用的,例如大家常用的 OpenCV 程式庫,然而不同的系統或是程式庫可能會有細微定義上的不同,需要小心


上一篇
Day2: 相機與投影 (二)
下一篇
Day4: vispy 視覺化 (一)
系列文
3D 重建實戰:使用 2D 圖片做相機姿態估計與三維空間重建13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言